#ifndef _NE_MIDI_CONTROLLER_H_
#define _NE_MIDI_CONTROLLER_H_

#include <neinit.h>

namespace ne
{
    enum MIDIControllerType
    {
        MIDI_BANK_SELECT = 0x00,
        MIDI_MODULATION = 0x01, // (MODULATION WHEEL OR LEVER)
        MIDI_BREATH_CONTROLLER = 0x02,
        // 0x03
        MIDI_FOOT_CONTROLLER = 0x04,
        MIDI_PORTAMENTO_TIME = 0x05,
        MIDI_DATA_ENTRY_MSB = 0x06,
        MIDI_MAIN_VOLUME = 0x07,
        MIDI_BALANCE = 0x08,
        // 0x09
        MIDI_PAN = 0x0A,
        MIDI_EXPRESSION_CONTROLLER = 0x0B,
        MIDI_EFFECT_CONTROL1 = 0x0C,
        MIDI_EFFECT_CONTROL2 = 0x0D,
        // 0x0E-0x0F
        MIDI_GENERAL_PURPOSE_CONTROLLER1 = 0x10,
        MIDI_GENERAL_PURPOSE_CONTROLLER2 = 0x11,
        MIDI_GENERAL_PURPOSE_CONTROLLER3 = 0x12,
        MIDI_GENERAL_PURPOSE_CONTROLLER4 = 0x13,
        // 0x14-0x1F
        MIDI_LSB_VALUE_FOR_CONTROLLER0 = 0x20,
        MIDI_LSB_VALUE_FOR_CONTROLLER1 = 0x21,
        MIDI_LSB_VALUE_FOR_CONTROLLER2 = 0x22,
        MIDI_LSB_VALUE_FOR_CONTROLLER3 = 0x23,
        MIDI_LSB_VALUE_FOR_CONTROLLER4 = 0x24,
        MIDI_LSB_VALUE_FOR_CONTROLLER5 = 0x25,
        MIDI_LSB_VALUE_FOR_CONTROLLER6 = 0x26,
        MIDI_LSB_VALUE_FOR_CONTROLLER7 = 0x27,
        MIDI_LSB_VALUE_FOR_CONTROLLER8 = 0x28,
        MIDI_LSB_VALUE_FOR_CONTROLLER9 = 0x29,
        MIDI_LSB_VALUE_FOR_CONTROLLER10 = 0x2A,
        MIDI_LSB_VALUE_FOR_CONTROLLER11 = 0x2B,
        MIDI_LSB_VALUE_FOR_CONTROLLER12 = 0x2C,
        MIDI_LSB_VALUE_FOR_CONTROLLER13 = 0x2D,
        MIDI_LSB_VALUE_FOR_CONTROLLER14 = 0x2E,
        MIDI_LSB_VALUE_FOR_CONTROLLER15 = 0x2F,
        MIDI_LSB_VALUE_FOR_CONTROLLER16 = 0x30,
        MIDI_LSB_VALUE_FOR_CONTROLLER17 = 0x31,
        MIDI_LSB_VALUE_FOR_CONTROLLER18 = 0x32,
        MIDI_LSB_VALUE_FOR_CONTROLLER19 = 0x33,
        MIDI_LSB_VALUE_FOR_CONTROLLER20 = 0x34,
        MIDI_LSB_VALUE_FOR_CONTROLLER21 = 0x35,
        MIDI_LSB_VALUE_FOR_CONTROLLER22 = 0x36,
        MIDI_LSB_VALUE_FOR_CONTROLLER23 = 0x37,
        MIDI_LSB_VALUE_FOR_CONTROLLER24 = 0x38,
        MIDI_LSB_VALUE_FOR_CONTROLLER25 = 0x39,
        MIDI_LSB_VALUE_FOR_CONTROLLER26 = 0x3A,
        MIDI_LSB_VALUE_FOR_CONTROLLER27 = 0x3B,
        MIDI_LSB_VALUE_FOR_CONTROLLER28 = 0x3C,
        MIDI_LSB_VALUE_FOR_CONTROLLER29 = 0x3D,
        MIDI_LSB_VALUE_FOR_CONTROLLER30 = 0x3E,
        MIDI_LSB_VALUE_FOR_CONTROLLER31 = 0x3F,

        MIDI_DAMPER_PEDAL = 0x40, // (SUSTAIN) (0x3F:OFF/0x40:ON)
        MIDI_PORTAMENTO = 0x41, // (0x3F:OFF/0x40:ON)
        MIDI_SOSTENUTO = 0x42, // (0x3F:OFF/0x40:ON)
        MIDI_SOFT_PEDAL = 0x43, // (0x3F:OFF/0x40:ON)
        MIDI_LEGATO_FOOTSWITCH = 0x44, // (VV = 0x00-0x3F:NORMAL, 0x40-0x7F:LEGATO)
        MIDI_HOLD2 = 0x45, // (63:OFF/64:ON)
        MIDI_SOUND_CONTROLLER1 = 0x46, // (DEFAULT: SOUND VARIATION)
        MIDI_SOUND_CONTROLLER2 = 0x47, // (DEFAULT: TIMBER/HARMONIC CONTENT)
        MIDI_SOUND_CONTROLLER3 = 0x48, // (DEFAULT: RELEASE TIME)
        MIDI_SOUND_CONTROLLER4 = 0x49, // (DEFAULT: ATTACK TIME)
        MIDI_SOUND_CONTROLLER5 = 0x4A, // (DEFAULT: BRIGHTNESS)
        MIDI_SOUND_CONTROLLER6 = 0x4B, // (DEFAULT: DECAY TIME)
        MIDI_SOUND_CONTROLLER7 = 0x4C, // (DEFAULT: VIBRATO RATE)
        MIDI_SOUND_CONTROLLER8 = 0x4D, // (DEFAULT: VIBRATO DEPTH)
        MIDI_SOUND_CONTROLLER9 = 0x4E, // (DEFAULT: VIBRATO DELAY)
        MIDI_SOUND_CONTROLLER10 = 0x4F,// (DEFAULT: UNDEFINED)
        MIDI_GENERAL_PURPOSE_CONTROLLER5 = 0x50,
        MIDI_GENERAL_PURPOSE_CONTROLLER6 = 0x51,
        MIDI_GENERAL_PURPOSE_CONTROLLER7 = 0x52,
        MIDI_GENERAL_PURPOSE_CONTROLLER8 = 0x53,
        MIDI_PORTAMENTO_CONTROL = 0x54,
        // 0x55-0x5A
        MIDI_EFFECTS1_DEPTH = 0x5B, // (FORMERLY EXTERNAL EFFECTS<REVERB> DEPTH)
        MIDI_EFFECTS2_DEPTH = 0x5C, // (FORMERLY TREMOLO DEPTH)
        MIDI_EFFECTS3_DEPTH = 0x5D, // (FORMERLY CHORUS DEPTH)
        MIDI_EFFECTS4_DEPTH = 0x5E, // (FORMERLY CELESTE<DETUNE> DEPTH)
        MIDI_EFFECTS5_DEPTH = 0x5F, // (FORMERLY PHASER DEPTH)
        MIDI_DATA_INCREMENT = 0x60, // (DATA ENTRY + 1)
        MIDI_DATA_DECREMENT = 0x61, // (DATA ENTRY - 1)
        MIDI_NON_REGISTERED_PARAMETER_NUMBER_LSB = 0x62,
        MIDI_NON_REGISTERED_PARAMETER_NUMBER_MSB = 0x63,
        MIDI_REGISTERED_PARAMETER_NUMBER_LSB = 0x64,
        MIDI_REGISTERED_PARAMETER_NUMBER_MSB = 0x65,
        // 0x66-0x77
        MIDI_MODE_ALL_SOUND_OFF = 0x78,
        MIDI_MODE_RESET_ALL_CONTROLLERS = 0x79,
        MIDI_MODE_LOCAL_CONTROL = 0x7A, // (0x00:OFF/0x7F:ON)
        MIDI_MODE_ALL_NOTES_OFF = 0x7B,
        MIDI_MODE_OMNI_OFF = 0x7C,
        MIDI_MODE_OMNI_ON = 0x7D,
        MIDI_MODE_MONO_ON = 0x7E, // (POLY OFF)
        MIDI_MODE_POLY_ON = 0x7F, // (MONO OFF)
    };
}

#endif
